#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
//struct A
//{
//	int a;
//	short b;
//	int c;
//	char d;
//}a;
//struct B
//{
//	int a;
//	short b;
//	char c;
//	int d;
//}b;
//
//int main()
//{
//	printf("%d\n", sizeof(a));
//	printf("%d\n", sizeof(b));
//
//	return 0;
//}

//int main(int argc, char* argv[])
//{
//    struct tagTest1
//    {
//        short a;
//        char d;
//        long b;
//        long c;
//    };
//    struct tagTest2
//    {
//        long b;
//        short c;
//        char d;
//        long a;
//    };
//    struct tagTest3
//    {
//        short c;
//        long b;
//        char d;
//        long a;
//    };
//    struct tagTest1 stT1;
//    struct tagTest2 stT2;
//    struct tagTest3 stT3;
//
//    printf("%d %d %d", sizeof(stT1), sizeof(stT2), sizeof(stT3));
//    return 0;
//}

//int main()
//{
//	printf("%d\n", sizeof(long));
//	return 0;
//}

//typedef struct 
//{
//	int a;
//	char b;
//	short c;
//	short d;
//}AA_t;
//
//int main()
//{
//	printf("%d\n", sizeof(AA_t));
//	return 0;
//}

//void* my_memcpy(void* dest, const void* sour, size_t num)
//{
//	void* ret = dest;
//	assert(dest && sour);
//	while (num--)
//	{
//		*(char*)dest = *(char*)sour;
//		++(char*)dest;
//		++(char*)sour;
//
//	}
//	return ret;
//}

//void* my_memmove(void* dest, const void* sour, size_t num)
//{
//	assert(dest && sour);
//	void* ret = dest;
//	if (dest < sour)
//	{
//		while (num--)
//		{
//			*(char*)dest = *(char*)sour;
//			++(char*)dest;
//			++(char*)sour;
//
//		}
//	}
//	else
//
//	{
//		while (num--)
//		{
//			*((char*)dest + num) = ((char*)sour + num);
//		}
//	}
//	return ret;
//}
//
//int main()
//{
//	int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	my_memmove(arr1, arr1+2, 20);
//	return 0;
//}

//struct Test
//{
//	int i;
//	char c;
//	double d;
//};
//struct Test1
//{
//	int a;
//	struct Test test;
//	char b;
//};
//int main()
//{
//	printf("%d\n", sizeof(struct Test1));
//	
//	return 0;
//}